<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      /* 
      ------分数注意事项-----
      本次测试满分为100(最多100分), 有4道加分题; 答案不够完整或者有错误当题0分处理; 

      ------分数处理-----
      (0-60]: 不及格, 处理: 提供第二份不同试卷晚自习的时候重新考试, 并在第二天晚自习时间单独进行测试题提问(大部分都回答不上则采用手抄试卷方案);

      (60-75]: 良良, 处理: 晚自习时间单独进行测试题提问(大部分都回答不上则采用手抄试卷方案);

      (75-90]: 良好, 处理: 放你一马, 好好复习;

      (90-100]: 优秀, 处理: 好好好, 继续保持;
      */

      // 1.JS延迟加载的方式有哪些？（5）
      //设置延时计时器
      // 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；（5）

      // 4.如何进行数据类型的判断？（5）
      //typeof(元素) 返回元素类型
      //元素 instanceof 构造函数（如String,Number...）,返回布尔型
      //Object.prototype.toString.call(元素) ,返回[object 构造函数]
      // 5.null 和 undefined 的区别？什么时候会得到 undefined？（5）
      //null是空值，undefined 表示没有被赋值。
      //变量在输出前没有被赋值；函数没设置返回值时，输出它的返回值
      // 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？（5）
      //变量的未定义时它的值是null，所以null == undefined 返回 true
      // null是null类型，undefined是undefined 类型，两者类型不同，所以null === undefined 返回 false
      // 7.使用 continue 或 break 终止循环时，两种方式的区别是？（5）
      // continue：结束本次循环
      // break：跳出当前循环
      // 8.如何判断字符串内是否包含指定字符？（5）
      function f8(arr,a) {
        for(let i=0;i<arr.length;i++){
          if(a===arr[i])return true
        }
        return false
      }
      //f8('123','2')
      // 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；（5）
      //会：splice,push,pop,shift,unshift
      //不会：forEach,map,slice,includes,indexOf,lastIndexOf,join,some,every,reduce,reverse,sort,concat
      // 10. 请写出下面语句的输出结果：（5）
      // let bar = true, number = 0;
      // console.log(bar + 0);//1
      // console.log(bar + "xyz");//'truexyz'
      // console.log(bar + true);//2
      // console.log(+true);//1
      // console.log(!'bluej');//flase
      // console.log(number++);//0
      // console.log(++number);//2
      // console.log(number);//2

      // 11. 根据用户输入时间实现倒计时(还剩x天x时x分x秒)，输入时间格式错误时要有错误提示（5）
      // window.prompt("请输入目标时间");
      // let t = new Date(window.prompt("请输入目标时间")).getTime();
      // let t
      // while (t===undefined) {
      //     t =prompt("请输入目标时间")
      //     //if(f(t)){}//用函数判断格式正确与否
      //   }
      function f11(t) {
        let d,h,m,s
        t= (new Date(t).getTime()-Date.now())/1000//秒
        console.log(t);
        d=Math.floor(t/60/60/24)
        h=Math.floor((t/60/60)%24)
        m=((t/60)%60).toFixed(0)
        s=parseInt(t%60)
        console.clear()
        return'还剩'+d+'天'+h+'时'+m+'分'+s+'秒'
      }
      // let set=setInterval(function(){
      //     console.log(f11(t));
      // },1000)
      // 12.输出从小到大排序好的五个不重复的随机"素数",范围[10-58)；（10）
      // 质数也叫素数是指在大于1的自然数中，除了1和它本身以外不再有其他因数的自然数，不能被任何整数整除的数。
        function f12(){
          for(let i=0;i<5;i++){
            let n=Math.floor(10+Math.random()*48)
            function f(n){
              for(let i=2;i<n;i++){
                if(parseInt(n%i)==n%i)return false
              }
              return true
            }
            let a=[]
            if(f(n))a.push(n)
            a=a.sort(function(a,b){
              return a-b
            })
            a.forEach(function(v){
              console.log(v);
            })
          }
        }
      
      // 13.把下面数组成员排序打乱；（5）
      function f13(){
      let arr13 = [10, 20, 30, 40, 50, 60];
      let newArr2 = []; // 打乱之后的数组
      for (let i = 0; i < arr13.length; i++) {
        let n=Math.floor((Math.random()*6))
        if(!newArr2.includes(arr13[n]))newArr2.push(arr13[n])
        else{i--}
      }
      console.log(newArr2);
      }
      //f13()
      // 14. 将多个数组进行去重合并；（10）
      function f14(){
      let arr140 = [1, 2, 3],
        arr141 = [2, 3, 4, 5];
      arr140=arr140.concat(arr141)
      arr140=arr140.filter(function(v,i){
        return i==arr140.indexOf(v)
      })
      console.log(arr140);
      }
      //f14()
      // 15. 找出数组 arr=[1, 2, 3, "a", 4, "a", 2, 4, "a"] 中重复出现过的元素,并用数组将重复元素装起来输出,并且统计每个元素出现的次数（10）
      function f15(){
      let arr15 = [1, 2, 3, 'a', 4, 'a', 2, 4, 'a'];
      let obj = {},a=[];
      a=arr15.filter(function(v,i){
        return i!=arr15.indexOf(v) 
      })
      a=a.filter(function(v,i){
        return i==a.indexOf(v)
      })
      console.log('重复元素为',a);
      arr15.forEach(function(v){
        if()
      })
      }
      //f15()
      // 16. 找出数组中年龄小于18岁的女生的信息重新组成新的数组,并且将她们count变为现有的平方（10）
      let arr16 = [
        {
          name: '111',
          sex: 'boy',
          age: 18,
          count: 20,
        },
        {
          name: '222',
          sex: 'girl',
          age: 17,
          count: 30,
        },
        {
          name: '333',
          sex: 'boy',
          age: 16,
          count: 40,
        },
        {
          name: '444',
          sex: 'girl',
          age: 15,
          count: 50,
        },
        {
          name: '555',
          sex: 'boy',
          age: 20,
          count: 60,
        },
        {
          name: '666',
          sex: 'girl',
          age: 13,
          count: 70,
        },
        {
          name: '777',
          sex: 'boy',
          age: 14,
          count: 80,
        },
      ];
      function f16(arr16){
        arr16=arr16.map(function(v){
          if(v.age<18)v.count=v.count*v.count
        })
        console.log(arr16);
      }
      //f16(arr16)
      // 17. 实现一个深克隆函数 (加分题 5)

      // 18. 实现一个数组的reduce方法 (加分题 5)
      function f18(cb,a){
        if(a===undefined){}
      }
      // 19. 写出强制转换的方法有哪些 (加分题 5)

      // 20. 如何判断一个对象是否为空对象的3种方法 (加分题 5)
    </script>
  </body>
</html>
